---@class GT.modifierInit 魔法效果
GT.modifierInit = class()

---@type table<ModifierKey,modifierInit_data>  初始化的魔法效果数据
modifierInit=OrderedTable()

---@class modifierInit_data 魔法效果创建初始化参数列表
---@field mk ModifierKey 魔法效果编号
---@field obtain OBTAIN_MODIFIER 获得魔法效果
---@field loss LOSS_MODIFIER 失去魔法效果
---@field count MODIFIER_LAYER_CHANGE 层数变化
---@field attr table<uKeyAttr,number> 魔法效果给单位提供属性


---@param data modifierInit_data[]
function GT.modifierInit:ctor(data)
    for i, v in ipairs(data) do
        modifierInit[v.mk] = v
    end
end

---@param data modifierInit_data[]
---@return GT.modifierInit
function GT.modifierInit.obj(data)
    return new(GT.modifierInit, data)
end

GT.event.OBTAIN_MODIFIER(function (owner_unit, from_unit, modifier)
    local d=modifierInit[modifier:api_get_modifier_key()]
    if d~=nil then
        if d.obtain~=nil then
            d.obtain(owner_unit, from_unit, modifier)
        end

        if d.attr~=nil then
            owner_unit:diy_add_attr(d.attr)
        end
    end
end)


GT.event.LOSS_MODIFIER(function (owner_unit, from_unit, modifier)
    local d=modifierInit[modifier:api_get_modifier_key()]
    if d~=nil then
        if d.loss~=nil then
            d.loss(owner_unit, from_unit, modifier)
        end
        if d.attr~=nil then
            owner_unit:diy_del_attr(d.attr)
        end
    end
end)

GT.event.MODIFIER_LAYER_CHANGE(function (owner_unit, from_unit, modifier, value)
    local d=modifierInit[modifier:api_get_modifier_key()]
    if d~=nil then
        if d.count~=nil then
            d.count(owner_unit, from_unit, modifier, value)
        end
    end
end)

